package com.example.rocket.producer;

import com.example.rocket.core.NbCallback;
import com.example.rocket.core.NbSendResult;

import java.util.Collection;

/**
 * @author TAO
 * @description: rocket-ons 顶层抽象接口
 * @date 2021/12/20 7:02 下午
 */
public interface NbMqProducer {

    /**
     * 同步消息
     *
     * @param topic
     * @param tag
     * @param payload
     * @return
     */
    String syncSend(String topic, String tag, Object payload);



    /**
     * 异步消息
     *
     * @param topic
     * @param tag
     * @param payload
     */
    void asyncSend(String topic, String tag, Object payload, NbCallback sendCallback);


    /**
     * 单向消息
     *
     * @param topic
     * @param tag
     * @param payload
     */
    void sendOneWay(String topic, String tag, Object payload);


    /**
     * 批量消息-同步
     *
     * @param topic
     * @param tag
     * @param messages
     * @return
     */
    NbSendResult batchSend(String topic, String tag, Collection<Object> messages);


    /**
     * 同步延迟消息
     *
     * @param topic
     * @param tag
     * @param message
     * @param timeout
     * @param delayLevel
     * @return
     */
    NbSendResult syncSend(String topic, String tag, Object message, long timeout, int delayLevel);


    /**
     * 异步延迟消息
     * @param topic
     * @param tag
     * @param message
     * @param timeout
     * @param delayLevel
     * @param sendCallback
     */
    void asyncSend(String topic, String tag, Object message, long timeout, int delayLevel, NbCallback sendCallback);

}
